<?php
/**
 *
 * 公共函数
 * Created by www.soe-soe.com
 * Author: shijy
 * Date: 2016/1/25
 * Time: 11:40
 */

function pre_dump(&$mix){
    echo '<pre>';
    var_dump($mix);
    echo '</pre>';
}



/**
 *　取用户标签
 * Author: shijy
 * @return array
 */
function getUTagKv(){
    $records=M('cfg_user_tag',null,DB_MAIN_CFG)->getField('tid,tagName',true);
    return $records;
}


/**
 *　取省级数据
 * Author: shijy
 * @return array
 */
function getProvinceKv(){
    return getRegionKv(0);
}

/**
 * 取行政区划数据
 * Author: shijy
 * @param $provinceId
 * @return array
 */
function getRegionKv($parentid=0){
    $base=C('REGION');
    $kv=array();
    if($parentid == 0){
        foreach($base as $one){
            if($one[3]==1){
                $kv[$one[0]]=$one[2];
            }
        }
    }else {
        foreach($base as $one){
            if($one[1]==$parentid){
                $kv[$one[0]]=$one[2];
            }
        }
    }
    return $kv;
}

function getEventsKv(){
    $records=M('e_events',null,DB_MAIN_CFG)->limit(60)->order('id desc')->select();
    $kv=array();
    foreach($records as $p){
        $kv[$p['id']]=$p['title'];
    }
    unset($records);
    return $kv;
}

function getMallKv(){
    $records=M('point_mall',null,DB_MAIN_CFG)->order('id desc')->limit(40)->select();
    $kv=array();
    foreach($records as $p){
        $kv[$p['id']]=$p['titleInner'];
    }
    unset($records);
    return $kv;
}

/**
 * 获取资讯栏目键值对
 * Author: shijy
 * @return array
 */
function getArticleKv(){
    $records=M('article',null,DB_MAIN_CFG)->where('audit='.AUDIT_PASS)->limit(60)->order('id desc')->select();
    $kv=array();
    foreach($records as $p){
        $kv[$p['id']]=$p['title'];
    }
    unset($records);
    return $kv;
}


/**
 * 获取资讯栏目键值对
 * Author: shijy
 * @return array
 */
function getChannelKv($obj=1){
    $records=M('cfg_channel',null,DB_MAIN_CFG)->where('channelObj='.$obj)->order('showOrder desc,id asc')->getField('id,channelName',true);
    return $records;
}

/**
 * 获取商户键值对
 * Author: shijy
 * @return array
 */
function getShopKv($restaurant = null){
    $where = "1";
    if($restaurant){
        $where .= " and restaurantId =".$restaurant;
    }
    $records=M('s_store',null,DB_MAIN_CFG)->where($where)->order('id asc')->getField('id,storeName',true);
    return $records;
}


/**
 *　取用户等级对应名称
 * Author: shijy
 * @return array
 */
function getLevelKv(){
    $records=M('cfg_user_level',null,DB_MAIN_CFG)->getField('level,levelName',true);
    return $records;
}

/**
 * 获取VIP对应等级会员
 * Author: shijy
 * @return array
 */
function getVipKv(){
    return array(
        0=>'普通会员',
        1=>'年卡会员'
    );
}

/*
 * 获取商务经理列表
 * Author:wwl
 * @return array
 */
function getBusinessMangerList(){
    $systemUser = M("gm_sys_user",null,DB_GM_CFG)
        ->where("role_id=".SYSTEM_ROLE_BUSINESS_MANAGER." and status=1")
        ->field("real_name,uid")
        ->select();
    $sysUser = array();
    if($systemUser){
        foreach($systemUser as $user){
            $sysUser[$user['uid']] = $user['real_name'];
        }
    }
    return $sysUser;
}

/**
 *　取活动类型 id => name
 * Author: shijy
 * @return array
 */
function getContentTypeKv(){
    $records=M('cfg_content_type',null,DB_MAIN_CFG)->getField('id,name');
    return $records;
}

//分页模板配对
function fetchPage(&$smart,&$pagerObj){
    $smart->assign('prevPage',$pagerObj->nowPage >1?$pagerObj->nowPage-1:0);
    $smart->assign('nextPage',$pagerObj->nowPage <$pagerObj->totalPages?$pagerObj->nowPage+1:0);
    $smart->assign('nowPage',$pagerObj->nowPage);
    $smart->assign('totalPage',$pagerObj->totalPages);
}

/**
 * 检查是否干净的字符，屏蔽字检查
 * Author: shijy
 * @param $
 */
function checkCleanWord(&$rawStr){
        $filter = "做鸡,作弊器,最淫官员,最牛钉子户,阻无通畅,走光,总统的讲话,自制手枪,自由亚州,自由西藏,自由门6.33,自由门,自杀指南,自杀手册,子女任职名单,追踪器,转让冰毒配方,转法轮,专政机器,主席复活,朱蒙,周容重,重题工,众里寻一的视频,中原油田,中央军委,中文搜性网,中美国家领导人的子女职业对照,中纪委,中国性爱城中国性城,中国无耻语录,中国特色错别字,中国是全球唯一不能惹的国家,中国十大悲情语句,中国人都在上的四大当,中国军用运输机,中国国家领导人最强阵容,中国国家领导人的最强阵容,中国承认影视网中国成人网中国成人通,中国成人网站,中国成人网,中国成人通,中共走狗,中共专制,中共政权,中共无赖,中共网特,中共迫害,中共媒体,中共警察,中共监狱,中共恶霸,中共独枭,中共当局,中共成人影视网,中共暴政,智能Ｈ３,智能H3,制做液体炸药,制作原子弹,制作摇头丸配方,制服诱惑2地下法庭,支持台湾,政治风波,政治,政府无能,政府软弱,征途私服,征途sf,征途556,征途,镇压学生,震撼你的心视频,震撼记录卖淫女,真善忍,真情大反馈进入网站,侦探设备,针孔摄像头,针孔摄像机,针孔,针对台湾,这年头就这样,趙紫陽,赵紫阳晚年谈话出笼,赵紫阳,帐篷就会脱销,张小平,张大权,炸弹制作,诈骗,遭警察殴打,在线博彩网站,在火车上被人强奸 ,远程偷拍,原子弹的制作方法,渊苏文,渊盖苏文,愈快乐愈堕落,欲望候车室,欲望地下城,玉蒲团之偷情宝鉴,玉蒲团,玉女淫情,玉龟,宇宙最高法理,与表妹通奸,幼女,油田总部,莹莹成人论坛,隐形无线耳机,淫穴,淫水,淫术炼金士,淫兽学院,淫兽学园,淫色少妇,淫女老师,淫魔舞会,淫靡,淫妹,淫乱的女子,淫间道,淫秽电影,淫荡少妇之白洁,阴毛小穴,阴茎插阴道,阴茎插小穴,阴茎,阴户,阴蒂,阴道图,阴道,阴唇,倚天屠龙别记,蚁力神,伊扎布特,伊波拉瘟疫,一夜性网,一夜情俱乐部,一四我周容重题工,一四我,一码中特,一卡多号,一级黄电视,一个妓女的年度总结报告,野性淫魔,要射了,遥想当年春衫薄,摇头丸,养殖户的求救书,杨元元,杨林,演绎中国失传正统文化,亚洲美女总,亚洲床上色情,血腥图片,雪山狮子旗,雪染飘朱,学生与警察,学生暴动,学姐和我的故事,穴内,穴口,徐和柴学友,性学教授,性信息交友,性息网,性虐待,性奴营,性奴,性免费电影,性爱日记,性爱电影,幸运用户确认,幸运用户进入网站,幸运用户查询,幸运大玩家进入,幸运大玩家登陆,幸运大玩家查询,星光伴我淫,信号屏蔽器,信号拦截器,新唐人,新诗年鉴,新生网,新疆独立,新xin唐tang,泄题,写给十七大人大代表一封信,邪恶的党,校花沉沦记,小穴,小泉恶搞,小平讲英语,小弟弟,销售军用手枪,想不到的黑幕,香港马会,香港六合彩,香港GHB水,香港GHB迷幻水,现代中国,现代英雄传奇,现代艳帝传奇,先烈的电话,昔有山西,希xi望wang之声,西藏正义,西藏天葬仪式,西藏天葬,西藏基金会,西藏国,西藏独立,西藏暴乱,武林情皇传,五奶小青,无线针孔摄像机,无线隐形耳机,无码影,无码片,无码电影,无界浏览器,无界浏览,无界,我周容,我的性启蒙老师,我的第一次外遇,瘟总再杆五年,温家堡蒋彦永,卫星遭黑客攻击,卫星天线接收器成人频道,卫星接收器,围绕土地问题的攻防,违禁品,往事追忆录,网游喷血美女左小娜,网上办证刻章,网上办证,网络代理软件,王子淫传,王爷倔宠儿,汪兆钧公开信,萬人暴,完全自杀手册,退党,退\\出\\党\\团\\队,突破网络封锁,突破封锁,透视眼镜,投毒杀人,偷拍,偷电,痛批政法委,童奴工,庭  妍,舔私处,田明建时间,天浴,天鹅之旅,天安门事件,天安门时间,天安门大屠杀,替考,提供甲基苯丙胺,提供K粉OR冰毒,腾讯幸运之星,特码,特马,套牌罢吃,套牌,陶驷驹贪污行贿案,陶驷驹,唐人电视台,贪官,太子党名单,太王四神记,太王死神记,太王记,台湾身份证,台湾,苏东解体,松花江污染汕尾事件,松花江污染,四我周,四六级答案,四级答案,四海龙女逃亡艳旅,四海龙女,死刑枪毙,死刑过程,死刑过,死亡笔记,斯皮尔博客北京奥运会,私服,丝袜美女 ,丝袜聊天室,睡着的武神,双鞋的故事,双儿篇,手足口病,手淫,手枪,手机追踪器,手机远程窃听器,手机信号屏蔽器,手机偷听器,手机窃听器,手机窃/听/器,手机魔卡,手机监听器,手机监听定位器,手机监听,手机复制卡,手机复制,手机短信群发器,手机定位OR手机监听,手机qie/听器,手机/窃/听/器,手机/截/听/器,视频自慰,视频自拍,视频脱衣,史上最强阵容的中国国家领导人,十七大你转折了吗,十七大,十景缎,十大奖项及中奖名单,十大忽悠名言,十大恶词,生成身份证,升达毕业证,升达,沈阳公安,神鬼18妓,神雕外传之郭襄,身份证生成器,身份证生成,身份证号码生成器身份证生成器软件,社民党,社会,舌战法庭,奢恋,少女俱乐部,少年阿宾,少妇白洁,上海性息,上海交警,汕尾事件,汕頭頻傳擄童割器官,山西洪洞,山西黑砖窑,山不过来,厦门大游行,杀人事件,色情小说,色情小电影,色情服务,色情电影,色情,色狼网色狼俱乐部,色空寺,色戒无删版,色戒高清晰未删节版,骚穴,骚水,骚女,骚媚春情,骚妹,骚逼小说黄色小说,三唑仑迷魂药,三唑仑麻醉乙醚,三唑仑,三句硬话,三级片BT下载,三级片,三坊七巷火灾,三挫仑,赛马,乳交乳伦,如何造原子弹,肉棍,肉棒,日本小泉,日本变态嫖客,仁寿警方,人与兽乱交图片,人体艺术,人兽性交,人兽乱交,人全球春节晚会,人妻兽虐曲,人民报,热血江湖私服,热血江湖,热售英语四六级考试答案,绕过封锁,群砍血腥时间,裙底走光,确保北京的水利,全国二奶大赛,全国二奶大奖赛,全国*揭晓二奶,求救遭拒,庆公测幸运抽奖活动,情欲小说,情色影院,情色影片,情色帖图成人漫画性爱图片,情色呻吟,情色光碟,清明节到了,清华网管,青楼十二房,秦青的幸福生活,亲共行动,亲爱的爸爸奸淫我,窃听器材,窃听器,切波特,强硬发言,强效失意药,强奸少妇,强奸II-制服诱惑,强奸,枪支军火,枪支弹药,枪支,枪淫少妇,枪手,枪杀王志平,枪模,枪决现场,枪决女犯,千岛湖之旅,汽车爆炸案,迫近水危机,平安夜自杀,喷雾型迷药,喷剂,炮轰密妃,盘古乐队,拍肩神药,欧美淫乱,女友坊,女优片,女优,女死囚,女色情自拍  ,奴役童工,奴事件,鸟巢缺陷,你退了吗,嫩穴,南京大学法学院,母子情欲小说,母之欲火,某杂志编辑部,魔界活动转区,模拟机,明慧,民族分裂,民主之声,民为法执,民警当副院长,民间流行的官场段子,民告官,灭绝罪,免费偷拍,免抵押贷款,蜜穴被插,蜜洞,密穴,秘密花园,迷药,迷情药,迷离的嫂嫂,迷奸药,迷奸表妹的小香穴,迷魂药激情,迷魂药,迷魂洞,迷昏药,迷幻药蒙汗药,梦中的女孩,蒙汗药粉,美少妇的哀羞,美女做愛,美女视频,美女人体艺术,美女黄色,美国之音,美国原装手机电子监控   ,美国凯德,玫瑰园,毛主席复活,毛泽东,毛一鲜,毛爷爷复活,毛片,毛派,卖身契系列,卖答案,买卖枪支,买答案,买春买淫,马家爵的一句话让在场警察都落泪,马加爵,麻醉乙醚,麻醉药,麻醉枪,麻醉钢枪,氯胺酮,骆冰淫传,裸体激情,裸体,裸聊合法,罗干,论坛群发王下载,轮盘机,轮奸虐杀,轮暴致死,乱伦,乱交乱淫乱伦,乱交的故事乱伦小说,乱交,露阴,露穴图,露穴,露胸图,露乳图,露毛  ,露毛,露点,鹿鼎记趣,卢跃刚,六四血案,六四学潮,六四屠杀,六四屠城,六四事件,六开网,六决不,六级答案,六合彩,六合采,六合,劉奇葆,流水穴,流氓无产者,刘全喜,领导人最强阵容,领导人最强大阵容,领导人,凌虐玉门,猎枪,烈火凤凰舍生取义,烈火凤凰,两会,两岸才子对话,梁保华,联国专员,连线机,俪影蝎心,历史上的真实故事,李沛瑶,李洪志,礼品机,黎阳平,老衲痛经啊,老虎机上分器,老虎机定位器,老虎机,拦截器,拉萨骚乱,拉凳,拉登中国,拉登,狂风暴雨,快操我,口头检查,刻章,可儿,科技精英遇难,考验答案,考研答案,考试作弊器,军长发威,军火价格,军火,巨额骗储,菊花洞,九评共产党,九jiu评,警花肉搏强奸党,经典语录,禁书,禁室培欲6赤色杀意,禁断少女,金鳞岂是池中物,金伯帆,今有广东,姐姐开苞,狡猾的风水相师,交换夫妻,蒋彦永,疆独,江泽民瑞士,江西田园置业集团,江氏,江山美人志,江魔头,江路线,江理论,江老贼,江昏君,江湖淫娘,江核心,江二世,践踏中国女性,监听王,监听器,奸魔Ⅱ,假钞,假币,甲基苯丙胺合成工艺,家乐福,佳静安定片,加油机干扰器,加非猫：现实世界历险记,济南建设路,纪股票市场五卅惨案,计生风暴,极度诱惑,激情一刻现场脱,激情小电影,激情文学,激情图片,激情电影,激流中国,基地组织校园招聘,鸡奸骚穴骚水,鸡吧鸡巴,鸡巴,火药制作,火车出轨,活摘器 ,混蛋神风流史,昏药,回民暴动,挥发型迷药,黄网导航,黄色小说黄色图片,黄色小说,黄色小电影,黄色网站,黄色图片,黄色激情小电影,黄海暗杀,换妻俱乐部,换妻,胡主席,胡新宇,胡錦濤,胡锦涛,胡core,红楼绮梦,红海湾,黑窑奴役,黑星女侠,黑天使,黑灯舞厅,和奸成瘾,浩方对站平台活动,韩文身份证生成器,韩国身份证,酣乐欣,海乐神,海盗的悠闲生活,国际足坛五大,国际声援西藏,国歌股歌,鬼村,龟头,广州火车春运,广东王,广安第二人民医院,光盘与真相,官商勾结,官场顺口溜,官场潜规则,官场段子,官逼民反,关于堂明皇与杨贵姬,关机房,乖乖药,股市民谣,古方迷香,共奴,共狗,共产极权,共产党的末日,共产党,公务员调资,公务员工资,公务员的工资,公产专制,公产小丑,公产王朝,工商银行用户登陆,跟踪定位器,革命无罪,高莺莺,高校骚乱,高校群体事件,高校暴乱,高价转让火车票,高干子女,高干子弟,赣江学院,干扰器,感动中国乱弹人物揭晓,敢坐飞机吗,噶玛吧,富人与农民工,浮情浪子,扶不起的阿斗,夫妇乐园,风月大陆,风骚侍女,风流名妓苏小小,风雷游戏登陆,风尘劫,肥东交警,放荡青春,仿真枪,仿真假钞,方丈哭曰,反中游行,反中,反政府,反右题材,反民主,反华,反共,反对08奥运会,反动,法一轮,法輪功,法轮功,法轮佛法,法轮,法lun功,发/票/代/开,二奶大赛,二奶大奖赛,二奶大奖,恶搞晚会,堕落指南,多党执政,对日强硬,对华广播,短信注册,短信群发器,短信猫,赌博透视器,動乱,动*态*网,东北风情熟女之惑,电车之狼,点对点裸聊,第十六次代表,帝国之梦,地下先烈们纷纷来电询问,地下的先烈们纷纷打来电话,地下的先烈们电话询问,地磅遥控器解码器,抵制家乐福,抵制,迪里夏提,邓小平讲英语,邓小平的预言  ,邓小平的英文,邓派,等级答案,道县公安,盗电,倒退,导演专访,党国,当今四大扯蛋,当今六大谎言,当代中国无耻语录排行榜,当代无耻语录排行榜,当代十大无耻语录,当代八乱办公室守则官场日志,当代八乱办公室手官场日志,戴海静,待开发票,代考,代开发票,代-办-证件,代办证件,代办文凭,代办国外文凭,大祚荣,大扎荣,大学骚乱,大荣,大陆官员,大陆独裁者,大陆当权者,大陆当局,大揭露,大紀元,大纪元法轮功,大纪元,大珐,达赖领奖,达赖喇嘛,达赖过封锁,达赖,催情药,催情迷昏药,崔英杰,从圣地寻求财富,春药,春节晚会正统文化,春节晚会,创世之子猎艳之旅,传真群发,出售政协车证,出售银行卡,出售遥控拦截器,出售套牌轿车,出售套牌车,出售手枪,出售手qiang 手机,出售枪支,出售喷雾型迷药,出售迷魂药三唑仑,出售麻古,出售军用手枪,出售假人品币,出售假钞,出售假币假钞,出售假币,出售工字气枪铅弹,出售高压气枪,出售高考答案,出售短信群发器,出售毒品配方,出售车牌隐形喷剂,出售冰毒配方,出售冰毒,出售07年6月四级答案OR出售四级答案六级答案,出墙红杏,臭作尾行,丑化,痴男发威,城市激情聊天室,成人小说,成人午夜场,成人文学,成人图片激情图片情色图片,成人贴图,成人片,成人论坛,成人交友,成人电影网,成人电影,成人导航,陈水扁,陈娘宇下台,陈良宇,车牌反光,超越红墙,超淫杂交女,茶余饭后,曾道人,策屁,藏独,沧澜曲,彩票奖券网,彩票机,步枪,不良少女日记,博白县,波佳达,冰毒制作配方,冰毒配方,边坝时间,本拉登,被婶子当鸭子的我,背着父亲偷搞母亲,暴力镇压,暴力冲突,暴力拆迁,暴动,包养情妇12项吉尼斯排名,办证刻章发票,办证,办理证件,办理无抵押贷款,办理文凭,办理商业发票,百家乐,百度空间有奖活动,白小姐,罢食,罢工,罢饭凸点装,罢餐,爱神之传奇,啊扁涛哥,阿姨诱奸,阿姨的偷窥,阿里布达年代记,阿娇艳照下载,阿兵哥言语录,yahoo!奇摩登入,SKYPE幸运中奖,SEX情色论坛,QQ幸运抽奖活动,QQ宠物点击抽奖,QQ充值中心充值QQ号码,PK黑社会,K粉冰出售,K粉,king粉有售,IM买卖通幸运用户,go-vern-ment,Government,60天的攻防,27军军长,2008年阴曹地府春晚节目单,2005语录排行榜,2005言论,2005年十大欠抽人物,1969 尼木,18岁的雪儿,18年纪念,18DY电影,12次下跪";
        $tmp = explode(',',$filter);
        foreach($tmp as $_tmp) {
            if(strpos($rawStr,$_tmp) !== false){
                return $_tmp;
            }
        }
        return true;
}


/**
 * 导出数据为.csv格式表格
 *@param $data    一个二维数组,结构如同从数据库查出来的数组
 *@param $title   excel的第一行标题,一个数组,如果为空则没有标题
 *@param $filename 下载的文件名
 */
function exportCSV($data=array(),$title=array(),$filename='report')
{
    $fileName = $filename . '.csv';
    $filename = iconv("UTF-8", "GBK", $fileName);
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="' . $filename . '"');
    header('Cache-Control: max-age=0');
    $fp = fopen('php://output', 'a');

    foreach ($title as $i => $v) {
        $title[$i] = iconv('utf-8', 'gbk', $v);
    }
    fputcsv($fp, $title);

    $page = 1; $perPage = 10000;
    $totalCount = count($data);

    if($totalCount <= ($page * $perPage)){
        foreach($data as $k => $v){
            foreach($v as $kk=>$vv){
                $vv = str_replace(PHP_EOL,'', $vv);        //去除自动换行
                $v[$kk] = iconv('utf-8', 'gbk', $vv);
            }
            fputcsv($fp,$v);
        }
    } else{
        $cnt = 0;
        // 每隔$limit行，刷新一下输出buffer，不要太大，也不要太小
        $limit = 10000;
        $totalPage = max(1,ceil($totalCount/$limit));
        while ($page <= $totalPage){
            $cnt++;
            if ($limit == $cnt) { //刷新一下输出buffer，防止由于数据过多造成问题
                ob_flush();
                flush();
                $cnt = 0;
            }
            $result = array_slice($data,($page-1)*$perPage,$limit,true);
            foreach ($result as $k => $v){
                foreach ($v as $kk => $vv){
                    $vv = str_replace(PHP_EOL,'', $vv);        //去除自动换行
                    $v[$kk] = iconv('utf-8', 'gbk', $vv);
                }
                fputcsv($fp,$v);
            }
            $page++;
        }
    }
}



function getLocalPath($url){
    $savePath=C('FILE_UPLOAD_DIR');
    $showPath=C('FILE_SHOW_PATH');
    return str_replace($showPath,$savePath,$url);
}

/**
 * 导出数据为excel表格
 *@param $data    一个二维数组,结构如同从数据库查出来的数组
 *@param $title   excel的第一行标题,一个数组,如果为空则没有标题
 *@param $filename 下载的文件名
 *@examlpe
$stu = M ('User');
$arr = $stu -> select();
exportexcel($arr,array('id','账户','密码','昵称'),'文件名!');
 */
function exportExcel($data=array(), $title=array(), $filename='report'){
    vendor("PHPExcel.PHPExcel");
    $objPHPExcel = new PHPExcel();

    /*以下是一些设置 ，什么作者  标题啊之类的*/
    $objPHPExcel->getProperties()->setCreator("shijy")
        ->setLastModifiedBy("shijy")
        ->setTitle("数据导出")
        ->setSubject("数据EXCEL导出");
    /*以下就是对处理Excel里的数据， 横着取数据，主要是这一步，其他基本都不要改*/
    $field='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $in=0;
    $num=1;
    foreach($title as $kk=>$vv){
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue($field[$in++].$num, ''.$vv);
    }

    foreach($data as $k => $v){
        $num++;
        $in=0;
        foreach($v as $kk=>$vv){
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($field[$in++] . $num, ' ' . $vv);
        }
    }

    $objPHPExcel->getActiveSheet()->setTitle('数据');
    $objPHPExcel->setActiveSheetIndex(0);
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
    header('Cache-Control: max-age=0');
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
    exit;

}

function exportExcel_old($data=array(), $title=array(), $filename='report'){

    header("Content-type:application/octet-stream");
    header("Accept-Ranges:bytes");
    header("Content-type:application/vnd.ms-excel");
    header("Content-Disposition:attachment;filename=".$filename.".xls");
    header("Pragma: no-cache");
    header("Expires: 0");
    //导出xls 开始
    if (!empty($title)){
        foreach ($title as $k => $v) {
            $title[$k]=iconv("UTF-8", "GB2312",$v);
        }
        $title= implode("\t", $title);
        echo "$title\n";
    }
    if (!empty($data)){
        foreach($data as $key=>$val){
            foreach ($val as $ck => $cv) {
                $cv=str_replace("\t",'' ,$cv );
                $cv=str_replace("\n",'' ,$cv );
                $cv=str_replace("\r",'' ,$cv );
                $data[$key][$ck]=mb_convert_encoding($cv,"GBK","UTF-8");
            }
            $data[$key]=implode("\t", $data[$key]);

        }
        echo implode("\n",$data);
    }
}

/**
 *
 * Author: shijy
 * @param $objType
 * @param $objID
 * @param $num
 * @return bool
 */
function changeObjCommentNum($objType,$objID,$num){
    switch($objType){
        case OBJ_TYPE_ARTICLE:
            M('article',null,DB_MAIN_CFG)->where("id={$objID}")->setInc('commentNum',$num);
            break;
        case OBJ_TYPE_ACTIVITY:
            break;
        case OBJ_TYPE_STORE:
            
            break;
        default:
            return false;
    }
}






/**
 * 正则表达式 筛选判断
 * @param string $type 需要判断的字段的类型 （邮箱、手机.....）
 * @param string $subject 需要判断正则的字段
 * @return 正则匹配成功 return true 匹配失败 return false
 *
 */
function filedPreMatch($type, $subject) {
    switch ($type) {
        case 'email':
            $pattern =  "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i";
            break;
        
        case 'phone':
            $pattern = "/^[0-9]{11}$/";
            break;

        case 'jobNum':
            $pattern = "/^([0-9]{3})?$/";
            break;
        default:
            # code...
            break;
    }
    if(preg_match($pattern, $subject)) {
        return true;
    }else{
        return false;
    }
}

//比较时间
function compareDateTime($timeStamp1,$timeStamp2,$dateFormat='Ymd'){
    return strcmp(date($dateFormat,$timeStamp1),date($dateFormat,$timeStamp2));
}

//密码 加密
// 加密方式
function passwordEncryption($text) {
    $pw = md5($text.USER_PASSWORD_KEY_TO_MD5);
    if(DANG_QIAN_BAN_BEN == 'kannb') {
        $key = 'kannb.com';
        $pw = $text . $key;
        for ($i = 0; $i < 16; $i++) {
            $pw = md5($pw);
        }
    }
    return $pw;
}

/**
 *处理时间戳通用函数
 */
function ReadableTime($timestamp) {
    $interval = time() - $timestamp;
    if ($interval < 10) {
        return '刚刚';
    } elseif ($interval < 60) {
        return $interval. '秒前';
    } elseif ($interval < 3600) {
        return floor($interval/60).'分钟前';
    } elseif (date('ymd', time()) == date('ymd', $timestamp)) {
        return '今天 '.date('H:i', $timestamp);
    } elseif (date('ymd', time()) == date('ymd', $timestamp + 86400)) {
        return '昨天 '.date('H:i', $timestamp);
    } elseif (date('Y', $timestamp) === date('Y')) {
        //return date('n月j日 H:i', $timestamp);
        return date('n月j日', $timestamp);
    } else {
        return date('Y-m-d', $timestamp);
    }
}

/**
 *处理时间戳通用函数
 */
function EventReadableTime($time) {
    if(is_numeric($time)){
        $value = array(
            "years" => 0, "days" => 0, "hours" => 0,"minutes" => 0, "seconds" => 0,
        );
        if($time >= 31556926){
            $value["years"] = floor($time/31556926);
            $time = ($time%31556926);
            return $value["years"]."年抢完";
        }
        if($time >= 86400){
            $value["days"] = floor($time/86400);
            $time = ($time%86400);
            if($value["days"]) return $value["days"]."天抢完";
        }
        if($time >= 3600){
            $value["hours"] = floor($time/3600);
            $time = ($time%3600);
        }
        if($time >= 60){
            $value["minutes"] = floor($time/60);
            $time = ($time%60);
            if($value['hours']>0) return $value["hours"]."小时".$value["minutes"]."分抢完";
        }
        $value["seconds"] = floor($time);
        if($value["minutes"]) return $value["minutes"]."分".$value["seconds"]."秒抢完";
        else return $value["seconds"]."秒抢完";
        
    }else{
        return false;
    }
}
/**
 * 字符串截取，支持中文和其他编码
 * @static
 * @access public
 * @param string $str 需要转换的字符串
 * @param string $start 开始位置
 * @param string $length 截取长度
 * @param string $charset 编码格式
 * @param string $suffix 截断显示字符
 * @return string
 */
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) {
    if(function_exists("mb_substr"))
        $slice = mb_substr($str, $start, $length, $charset);
    elseif(function_exists('iconv_substr')) {
        $slice = iconv_substr($str,$start,$length,$charset);
    }else{
        $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
        $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
        $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
        $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
        preg_match_all($re[$charset], $str, $match);
        $slice = join("",array_slice($match[0], $start, $length));
    }

    return ($suffix && (mb_strlen($str,$charset) > $length)) ? $slice.'...' : $slice;
}

/**
 * 根据文字表术获取表情地址
 * 实现方法：    正则
 *
 * @param string $text 要进行处理的文字
 *
 * @return string
 */
function raEmotionsUrl($text) {
    include WEB_ROOT.'/Application/Common/Conf/emotions.php';
    $faces = unserialize($text);
    preg_match_all("/\[.*\]/U", $text, $output, PREG_PATTERN_ORDER);
    if($output[0]) {
        foreach ($output[0] as $f) {
            foreach ($faces as $e) {
                if ($e['phrase'] == $f) {
                    $text = str_replace($f, '<img src="' . $e['url'] . '" alt="" title=""/>', $text);
                }
            }
        }
    }
    return $text;
}









/**
 * 生成缩略图
 * @param $src_img:原图数据
 * @param $from:图片位置
 * return:id>0 执行完成，返回，msg=显示路径；id=0 报错
 */
function image_resize($src_img,$from){
    $imgPosition = C('imgPosition');
    $WH = $imgPosition[$from];
    $width = $WH['width'];$height = $WH['height'];

    if(!$from || ($width <=0 && $height<=0)){
        return array('id'=>0,'msg'=>"参数错误");
    }

    list($src_w, $src_h, $type) = getimagesize($src_img);

    $file =  substr($src_img,strlen(dirname(dirname($src_img))));
    if($width<=0){
        $addDir = "000x";
    }else{
        $addDir = $width.'x';
    }

    if($height<=0){
        $addDir .= "000";
    } else{
        $addDir .= $height.'';
    }

    $uploadFile = C('FILE_UPLOAD_DIR').$addDir.$file; //上传文件
    $showPath = C('FILE_SHOW_PATH').$addDir.$file;
    $uploadPath = dirname($uploadFile);//上传目录

    //是否已有缩略图
    if(file_exists($uploadFile)){
        return array('id'=>2,'msg'=>$showPath); //已有缩略图，取缩略图
    }
    $temp = array(1=>'gif', 2=>'jpeg', 3=>'png');
    if(!$temp[$type]){
        return array('id'=>0,'msg'=>'上传图片格式不符合，<br/>请重新选择jpeg/png/gif格式图片后重试');
    }
    $tmp = $temp[$type];
    $inFunc = "imagecreatefrom$tmp";
    $outFunc = "image$tmp";

    //载入原图
    $img = $inFunc($src_img);
    imagesavealpha($img,true);  //保存sourcePic图像的透明色;

    //等比例缩略
    if($width <= 0){
        $width = ($src_w/$src_h)*$height;
    } else if($height <=0){
        $height = $width/($src_w/$src_h);
    }

    if($src_w/$width > $src_h/$height){
        $src_w = $width * ($src_h/$height);
    }else{
        $src_h = $height * ($src_w/$width);
    }

    if(!is_dir($uploadPath)){
        $dir = mkdir($uploadPath,0777,true);
        if(!$dir){
            return array('id'=>0,'msg'=>'缩略图生成路径不存在，路径生成失败');
        }
    }

    //创建缩略图
    $dst_img = imagecreatetruecolor($width, $height); //创建缩略图
    imagealphablending($dst_img,false);//这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;
    imagesavealpha($dst_img,true);//这里很重要,意思是不要丢了$thumb图像的透明色;
    //赋值图像并改变大小
    imagecopyresampled($dst_img,$img,0,0,0,0,$width,$height,$src_w,$src_h);

    //输出图像
    $res = $outFunc($dst_img,$uploadFile);
    imagedestroy($dst_img);
    imagedestroy($img);
    if($res){
        $return = array('id'=>1,'msg'=>$showPath);  //返回压缩图
    } else{
        $return = array('id'=>0,'msg'=>'缩略图生成失败');
    }
    return $return;
}

/**
 * 二维数组根据字段进行排序
 * @params array $array 需要排序的数组
 * @params string $field 排序的字段
 * @params string $sort 排序顺序标志 SORT_DESC 降序；SORT_ASC 升序
 */
function arraySequence($array, $field, $sort = 'SORT_DESC')
{
    $arrSort = array();
    foreach ($array as $key => $val) {
        foreach ($val as $k => $v) {
            $arrSort[$k][$key] = $v;
        }
    }
    array_multisort($arrSort[$field],$sort,$array);
    return $array;
}

/*
 * 系统配置的数据处理（dealCurrent）、读取（readConfig）和写入（writeConfig）
 */
function dealCurrent($val){
    if(is_array($val)){
        $rem = $val[1];
        @list($val['title'], $val['mem'], $val['format'], $val['authority']) = explode('|', $rem);
    }
    return $val;
}

function writeConfig($filePath, $cfgArr,$defaultCfg,$lockFile="")
{
    $originalData = readConfig($filePath);
    //local_specialConfig是否存在
    if(!$originalData || $originalData == ""){
        $originalData = $defaultCfg;
        $str = "<?php\n";
        file_put_contents($filePath, $str);
        foreach ($originalData as $k => $v){
            foreach ($cfgArr as $key => $value) {
                if($k == $key){
                    $value = str_replace('\'','',$value);
                    if(strpos($v[0],'\'')===false){
                        $originalData[$k][0] = $value;
                    } else{
                        $originalData[$k][0] = '\''.$value.'\'';
                    }
                }
            }

            if(is_numeric($k)){
                unset($originalData[$k]);
            } else{
                $str = "define('{$k}',{$originalData[$k][0]});\n";
                file_put_contents($filePath, $str, FILE_APPEND);
            }
        }
    } else{
        foreach ($defaultCfg as $k => $v){
            foreach ($originalData as $key => $val){
                if($k == $key){
                    $val[0] = str_replace('\'','',$val[0]);
                    if(strpos($v[0],'\'')===false){
                        $defaultCfg[$k][0] = $val[0];
                    }else{
                        $defaultCfg[$k][0] = '\''.$val[0].'\'';
                    }

                }
            }
        }
        $str = "<?php\n";
        file_put_contents($filePath, $str);
        foreach ($defaultCfg as $k=>$v){
            foreach ($cfgArr as $key=>$val){
                if($k == $key){
                    $val = str_replace('\'','',$val);
                    if(strpos($v[0],'\'')===false) {
                        $defaultCfg[$k][0] = $val;
                    }else{
                        $defaultCfg[$k][0] = '\''.$val.'\'';
                    }
                }
            }
            if(is_numeric($k)){
                unset($defaultCfg[$k]);
            } else{
                $str = "define('{$k}',{$defaultCfg[$k][0]});\n";
                file_put_contents($filePath, $str, FILE_APPEND);
            }
        }
    }
    if($lockFile){
        file_put_contents($lockFile,'使用说明');
    }
}

function readConfig($filePath)
{
    if(!file_exists($filePath)){
        return array();
    }
    $rawContent = file_get_contents($filePath);
    $re = preg_replace('/(\/\*.*\*\/)/s', '', $rawContent);//清除块注释
    $arr = explode("\n", $re);

    $matchArr = array();
    $cfgKv = array();
    foreach ($arr as $key => $one) {
        $r = preg_match('/\w*define\(\s*\'(.+)\'\s*,\s*(\'?[^\']*\'?)\s*\);\s*\/\/(.+)/i', $one, $matchArr);
        if ($r > 0) {
            $cfgKv[$matchArr[1]] = array($matchArr[2], $matchArr[3]);
        } elseif (preg_match('/^\/\/.*$/', $one)) {
            $cfgKv[] = $one;
        } elseif(preg_match('/\w*define\(\s*\'(.+)\'\s*,\s*(\'?[^\']*\'?)\s*\);/i', $one, $matchArr)){
            $cfgKv[$matchArr[1]] = array($matchArr[2]);
        }
    }

    return $cfgKv;
}